package com.monolithiot.sso.service;

import com.monolithiot.sso.common.entity.User;
import com.monolithiot.sso.common.entity.UserGroup;
import com.monolithiot.sso.common.entity.UserGroupRole;
import com.monolithiot.sso.common.exception.AlreadyExistedException;

import java.util.List;

/**
 * 2018/12/30 Create by 郭文梁
 * UserGroupRoleService
 * 用户组角色业务行为定义
 *
 * @author 郭文梁
 * @date 2018/12/30
 */
public interface UserGroupRoleService extends BaseService<UserGroupRole> {
    /**
     * 用户加入用户组
     *
     * @param user      用户
     * @param userGroup 用户组
     * @return UserGroupRole 实体
     * @throws AlreadyExistedException 用户已经加入该用户组时抛出
     */
    UserGroupRole join(User user, UserGroup userGroup) throws AlreadyExistedException;

    /**
     * 通过用户和用户组查找角色(只查找状态为已通过的角色)
     *
     * @param user      用户
     * @param userGroup 用户组
     * @return 角色对象
     */
    UserGroupRole findByUserAndGroup(User user, UserGroup userGroup);

    /**
     * 根据用户查询出其所在所有用户组中的角色，同时Fetch出用户组的信息
     *
     * @param user 用户对象
     * @return Role List
     */
    List<UserGroupRole> findByUserWithGroup(User user);

    /**
     * 查找用户创建的群组中的未通过的申请列表
     *
     * @param user 用户
     * @return UserGroupRule List
     */
    List<UserGroupRole> findNotPassRulesByCreator(User user);

    /**
     * 同意加群申请
     *
     * @param role 申请
     */
    void agreeApply(UserGroupRole role);
}
